/**
 * @project_name thread
 * @package_name com.gxwz.thread
 * @file_name ThreadPool.java
 */
package com.gxwz.thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 
 * @author chendequan
 * @email 1527254027@qq.com
 * @datetime 2013-9-5 下午01:20:35
 * 
 */
public class ThreadPool {
	// 在线程池的编程模式下，任务时交给整个线程池，而不是直接提供交给某个线程，
	// 线程成绩在拿到任务后，在内部超有空闲的线程，在吧任务交给空闲的线程，
	// 这就是封装；注意：任务是交给线程池，而不是直接给线程

	public static void main(String[] args) {
		// 创建一个线程池并创建3个线程放在线程池里
		ExecutorService threadPool = Executors.newFixedThreadPool(3);
		// 10个任务
		for (int i = 1; i <= 10; i++) {
			System.out.println("------" + i + "-----");
			final int task = i;
			threadPool.execute(new Runnable() {
				@Override
				public void run() {
					for (int j = 1; j <= 10; j++) {
						try {
							Thread.sleep(20);
						} catch (InterruptedException e) {
							e.printStackTrace();
						}

						System.out.println(Thread.currentThread().getName()
								+ " has complete " + j * 10 + "% for task of "
								+ task);
					}
				}
			});
		}

		System.out.println("all of 10 tasks hava committed!!");
	}
}
